//#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int mp[N];
//int e[N], ne[N], pre[N], h, id;
//void push_front(int x)
//{
//	++id;
//	e[id] = x;
//	mp[x] = id;
//	pre[id] = h;
//	ne[id] = ne[h];
//	pre[ne[h]] = id;
//	ne[h] = id;
//}
//void Print()
//{
//	for (int i = ne[h]; i; i = ne[i])
//	{
//		cout << e[i] << " ";
//	}
//	cout << endl;
//}
//void InsertAfter(int p, int x)
//{
//	++id;
//	e[id] = x;
//	mp[x] = id;
//	ne[id] = ne[p];
//	pre[id] = p;
//	pre[ne[p]] = id;
//	ne[p] = id;
//}
//void InsettFront(int p, int x)
//{
//	++id;
//	e[id] = x;
//	mp[x] = id;
//	ne[id] = p;
//	pre[id] = pre[p];
//	ne[pre[p]] = id;
//	pre[p] = id;
//}
//void Erase(int p)
//{
//	if (ne[p])
//	{
//		mp[e[p]] = 0;
//		ne[pre[p]] = ne[p];
//		pre[ne[p]] = pre[p];
//	}
//}
//int main()
//{
//	for (int i = 1; i <= 5; i++)
//	{
//		push_front(i);
//		Print();
//	}
//	InsettFront(2, 22);
//	Print();
//	InsettFront(3, 33);
//	Print();
//	InsettFront(4, 44);
//	Print();
//	Erase(2);
//	Print();
//	Erase(5);
//	Print();
//	return 0;
//}
#include<iostream>
using namespace std;	
const int N = 1e5 + 10;
const int M = 1e6 + 10;
int ne[N], h;
int id;
int e[N];
int mp[M];
int main()
{
	id++;
	e[id] = 1;
	mp[1] = id;  
	
	int q;
	cin >> q;
	while (q--)
	{ 
		int op, x;
		cin >> op >> x;
		if (op == 1)
		{
			int y;
			cin >> y;
			++id;
			e[id] = y;
			ne[id] = ne[mp[x]];
			ne[mp[x]] = id;
			mp[y] = id;
		}
		else if (op == 2)
		{
		
				cout << e[ne[mp[x]]] << endl;
	
		}
		else
		{
			mp[e[ne[mp[x]]]] = 0;
			ne[mp[x]] = ne[ne[mp[x]]];
		}
	}
	return 0;
}